package com.liuyjy.es.enums;

/**
 * @Author liuyjy
 * @Date 2025/3/3 12:48
 * @Description: 字段类型枚举
 **/
public enum FieldType {

    // ========== 核心类型 ==========
    TEXT("text"),          // 文本类型（支持分词）
    KEYWORD("keyword"),    // 关键字类型（不分词）
    LONG("long"),          // 64位整数
    INTEGER("integer"),    // 32位整数
    SHORT("short"),        // 16位整数
    BYTE("byte"),          // 8位整数
    DOUBLE("double"),      // 双精度浮点数
    FLOAT("float"),        // 单精度浮点数
    BOOLEAN("boolean"),    // 布尔类型
    DATE("date"),          // 日期类型
    BINARY("binary"),      // 二进制类型

    // ========== 高级类型 ==========
    OBJECT("object"),      // 对象类型
    NESTED("nested"),      // 嵌套类型
    GEO_POINT("geo_point"),// 地理坐标点
    GEO_SHAPE("geo_shape"),// 地理形状
    IP("ip"),              // IP 地址
    COMPLETION("completion"), // 自动补全
    TOKEN_COUNT("token_count"), // 分词计数

    // ========== 特殊类型 ==========
    JOIN("join"),          // 父子文档关系
    PERCOLATOR("percolator"), // 过滤器类型
    RANK_FEATURE("rank_feature"), // 排名特征
    RANK_FEATURES("rank_features"); // 多排名特征

    private final String esType;

    FieldType(String esType) {
        this.esType = esType;
    }

    /**
     * 获取 Elasticsearch 中的类型名称
     */
    public String getEsType() {
        return esType;
    }

    /**
     * 根据字符串获取对应的 FieldType
     */
    public static FieldType fromString(String type) {
        for (FieldType fieldType : FieldType.values()) {
            if (fieldType.getEsType().equalsIgnoreCase(type)) {
                return fieldType;
            }
        }
        throw new IllegalArgumentException("未知的字段类型: " + type);
    }
}
